Home prices

Goal

  • Describe all the variables that will influence residential home prices in the United States over the next 10 years.

Steps

  • Get data and Preprocess
  • EDA
  • Conclusion

Get data

In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sbn
import plotly_express as px
import us
import plotly.offline as py
import plotly.graph_objects as go
import us

py.init_notebook_mode()

Get house price data

In [2]:
data = pd.read_csv("Metro_zhvi_uc_sfrcondo_tier_0.33_0.67_raw_mon.csv")
data.head()
Out[2]:
RegionID SizeRank RegionName RegionType StateName 1996-01-31 1996-02-29 1996-03-31 1996-04-30 1996-05-31 ... 2020-01-31 2020-02-29 2020-03-31 2020-04-30 2020-05-31 2020-06-30 2020-07-31 2020-08-31 2020-09-30 2020-10-31
0 102001 0 United States Country NaN 107821.867678 107654.603009 107713.705054 107918.942733 108164.619841 ... 249203.331433 250643.259543 252629.014281 254150.724751 254549.565967 255614.305037 257585.290696 259831.677123 262360.574275 265284.724765
1 394913 1 New York, NY Msa NY 189934.272735 188204.824639 187816.624546 187498.218465 187389.402039 ... 483951.088045 485839.712243 488194.165391 491315.870256 491982.576068 492622.948786 496247.290834 499415.566341 505450.065658 511262.557585
2 753899 2 Los Angeles-Long Beach-Anaheim, CA Msa CA 187347.729377 186677.475492 186385.069989 186361.343962 186230.020967 ... 685244.538647 695398.255181 703661.731518 704376.924417 691466.082540 695103.278425 703758.462391 713145.770130 721717.599064 734809.502703
3 394463 3 Chicago, IL Msa IL 162897.743380 162896.882478 161878.897187 163450.517371 164035.887900 ... 244497.884662 245640.732803 247185.110403 247995.539082 248650.973753 249453.850439 251404.948874 252758.291806 256131.418453 258465.669236
4 394514 4 Dallas-Fort Worth, TX Msa TX 114348.478842 114263.285984 114586.607256 115120.218038 115361.847995 ... 260128.871786 261636.782641 263331.041996 264196.814157 264868.729373 266565.066854 267599.144696 269985.953332 272021.390173 274991.169069

5 rows × 303 columns

In [3]:
# extract city from region name
data.drop(0,axis=0,inplace=True)
data['city'] = data.RegionName.apply(lambda x: x.split(',')[0])
In [4]:
dates = data.columns.tolist()[5:-1]
In [5]:
def data_to_df(df,row,col,names):
    df.set_index(row,inplace=True)
    row = df.index.tolist()
    d = []
    for i in range(len(row)):
        for j in range(len(col)):  
            d.append([row[i],col[j],df.at[row[i],col[j]]])
    return pd.DataFrame(np.array(d),columns=names)
In [6]:
df = data_to_df(df = data, row='StateName', col=dates,names=['state','date','price'])
df.head()
/home/csvankhede/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:8: VisibleDeprecationWarning:

Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray

Out[6]:
state date price
0 NY 1996-01-31 [189934.27273468702, 93385.22124743737, 95805....
1 NY 1996-02-29 [188204.82463900087, 92638.17843322412, 95187....
2 NY 1996-03-31 [187816.62454580425, 92435.55815801916, 95069....
3 NY 1996-04-30 [187498.21846460103, 92266.61743953072, 95207....
4 NY 1996-05-31 [187389.4020394173, 92139.25787168797, 95303.2...
In [7]:
df.price.fillna(0,inplace=True)
df.date = pd.to_datetime(df.date)
df.price = df.price.apply(lambda x: sum(np.nan_to_num(x))/len(np.nan_to_num(x)) if type(x)==np.ndarray else x)
# df['state'] = df.city.apply(lambda x: us.states.lookup(x).abbr if us.states.lookup(x) is not None else x)
df['year'] = df.date.dt.year
df.isna().sum()
Out[7]:
state    0
date     0
price    0
year     0
dtype: int64

Get state wise GDP

In [8]:
gdp = pd.read_excel('gdp_by_state.xls',skiprows=5,skipfooter=3)
gdp.drop(0,axis=0,inplace=True)
In [9]:
year = gdp.columns[2:]
df_gdp = data_to_df(gdp,'GeoName',year,['state','year','gdp'])
df_gdp.year = df_gdp.year.apply(lambda x: int(x.split('-')[1]))
df_gdp.state = df_gdp.state.apply(lambda x: us.states.lookup(x).abbr if us.states.lookup(x) is not None else x)
In [10]:
df_gdp.head()
Out[10]:
state year gdp
0 AL 1998 3.6
1 AL 1999 3.7
2 AL 2000 1.6
3 AL 2001 -0.4
4 AL 2002 2.6
In [11]:
df = df.merge(df_gdp,left_on=['state','year'], right_on=['state','year'])

Get state wise employment percentage

In [12]:
emp = pd.read_excel('by_state_data/Employment_by_state.xls',skiprows=5,skipfooter=5)
col = ['GeoFips','GeoName','1997','1998','1999','2000','2001','2002','2003','2004','2005','2006','2007','2008','2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019']
emp.drop(0,inplace=True)
emp = emp[col]
emp.head()
Out[12]:
GeoFips GeoName 1997 1998 1999 2000 2001 2002 2003 2004 ... 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
1 1000 Alabama 1.5 1.5 1.5 1.4 1.4 1.4 1.4 1.4 ... 1.4 1.4 1.4 1.4 1.4 1.4 1.4 1.3 1.3 1.3
2 2000 Alaska * 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 ... 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.2
3 4000 Arizona 1.6 1.7 1.7 1.7 1.7 1.7 1.8 1.8 ... 1.8 1.8 1.8 1.8 1.9 1.9 1.9 1.9 1.9 1.9
4 5000 Arkansas 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 ... 0.9 0.9 0.9 0.9 0.9 0.8 0.8 0.8 0.8 0.8
5 6000 California 11.4 11.6 11.7 11.6 11.7 11.7 11.7 11.7 ... 11.4 11.3 11.5 11.7 11.8 11.9 12.0 12.0 12.0 12.1

5 rows × 25 columns

In [13]:
emp = data_to_df(df = emp, row='GeoName', col=col[2:],names=['state','year','emp_rate'])
emp.state = emp.state.apply(lambda x: us.states.lookup(x).abbr if us.states.lookup(x) is not None else x)
emp.year = emp.year.astype('int')
emp.emp_rate = emp.emp_rate.astype('float')
In [14]:
df = df.merge(emp,left_on=['state','year'], right_on=['state','year'])

Get morgage interest rate

In [15]:
interest = pd.read_csv("by_state_data/MORTGAGE30US_intrest_rate.csv")
interest.DATE = pd.to_datetime(interest.DATE)
interest.head()
Out[15]:
DATE MORTGAGE30US
0 1971-04-02 7.33
1 1971-04-09 7.31
2 1971-04-16 7.31
3 1971-04-23 7.31
4 1971-04-30 7.29
In [16]:
interest = interest.groupby(interest.DATE.dt.year).mean().reset_index()
interest.columns = ['year','interest_rate']
In [17]:
df = df.merge(interest,left_on='year',right_on='year')

Get state wise population percentage

In [18]:
population = pd.read_excel('by_state_data/population_by_state.xls',skiprows=5,skipfooter=6)
population = population[col]
population.drop(0,axis=0,inplace=True)
population.head()
Out[18]:
GeoFips GeoName 1997 1998 1999 2000 2001 2002 2003 2004 ... 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
1 1000 Alabama 1.6 1.6 1.6 1.6 1.6 1.6 1.6 1.5 ... 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
2 2000 Alaska * 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 ... 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2
3 4000 Arizona 1.7 1.8 1.8 1.8 1.9 1.9 1.9 1.9 ... 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.2 2.2 2.2
4 5000 Arkansas 1.0 1.0 1.0 0.9 0.9 0.9 0.9 0.9 ... 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
5 6000 California 11.9 12.0 12.0 12.0 12.1 12.1 12.2 12.1 ... 12.1 12.1 12.1 12.1 12.1 12.1 12.1 12.1 12.1 12.0

5 rows × 25 columns

In [19]:
population = data_to_df(population,'GeoName',col[2:],['state', 'year', 'population_perc'])
In [20]:
population.year = population.year.astype('int')
population.population_perc = population.population_perc.astype('float')
population.state = population.state.apply(lambda x: us.states.lookup(x).abbr if us.states.lookup(x) is not None else x)
In [21]:
df = df.merge(population,left_on=['state','year'], right_on=['state','year'])
In [22]:
df.gdp = df.gdp.astype('float')
In [23]:
df['month'] = df.date.dt.month

Get state wise house price index

In [24]:
hpi = pd.read_csv('House_price_by _state.csv')

col = ['AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL',
       'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME',
       'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV',
       'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA',
       'VT', 'WA', 'WI', 'WV', 'WY']
hpi = data_to_df(hpi, 'Date', col,['yr','state','hpi'] )
hpi.yr = pd.to_datetime(hpi.yr)
hpi.hpi = pd.to_numeric(hpi.hpi)
hpi['year'] = hpi.yr.dt.year
hpi['month'] = hpi.yr.dt.month
hpi.drop(columns='yr',inplace=True)
hpi.head()
Out[24]:
state hpi year month
0 AK 180.140002 2017 12
1 AL 138.465286 2017 12
2 AR 143.535720 2017 12
3 AZ 185.932453 2017 12
4 CA 224.416791 2017 12
In [25]:
df = df.merge(hpi, left_on=['state','year','month'], right_on=['state','year','month'])

Get income in us

In [26]:
income = pd.read_excel('personel income.xls',skiprows=10)
income.observation_date = pd.to_datetime(income.observation_date)
income['year'] = income.observation_date.dt.year
income['month'] = income.observation_date.dt.month
income.drop('observation_date',axis=1,inplace=True)
income.head()
Out[26]:
PI year month
0 391.8 1959 1
1 393.7 1959 2
2 396.5 1959 3
3 399.9 1959 4
4 402.4 1959 5
In [27]:
df = df.merge(income,left_on=['year','month'],right_on=['year','month'])

EDA

In [28]:
df.head()
Out[28]:
state date price year gdp emp_rate interest_rate population_perc month hpi PI
0 NY 1998-01-31 75488.077683 1998 1.9 6.2 6.942642 6.8 1 79.035562 7387.7
1 NY 1998-01-31 75488.077683 1998 1.9 6.2 6.942642 6.8 1 79.035562 7387.7
2 NY 1998-01-31 75488.077683 1998 1.9 6.2 6.942642 6.8 1 79.035562 7387.7
3 NY 1998-01-31 75488.077683 1998 1.9 6.2 6.942642 6.8 1 79.035562 7387.7
4 NY 1998-01-31 75488.077683 1998 1.9 6.2 6.942642 6.8 1 79.035562 7387.7
In [29]:
states = df.groupby('state')['price'].max().reset_index().sort_values(by='price',ascending=False)['state'][:5].values.tolist()
tmp = df[df.state.isin(states)].groupby(['year','state'])['price'].mean().dropna().reset_index()
In [30]:
px.line(tmp, 
        x='year', 
        y='price',
        color='state',
        title='Top 5 expensive state\'s House price from year 1998 to 2020 by state')
  • Above plot shows that price of the house is increasing with time.
  • Cites like CA, DC, MA etc have the highest house price through out the time.
  • There was hike in the price of the house between 2005 to 2008 on mostly all the states house prices.
In [31]:
scl = [[0.0, 'rgb(242,240,247)'],[0.2, 'rgb(218,218,235)'],[0.4, 'rgb(188,189,220)'],[0.6, 'rgb(158,154,200)'],[0.8, 'rgb(117,107,177)'],[1.0, 'rgb(84,39,143)']]

tmp = df.groupby('state')['gdp'].mean().reset_index()

tmp = tmp.dropna(subset=['state','gdp'], how='any')
data = [ dict(
        type='choropleth',
        colorscale = scl,
        autocolorscale = False,
        locations = tmp['state'], 
        z = tmp['gdp'].astype(float), 
        locationmode = 'USA-states', 
        marker = dict(
            line = dict (
                color = 'rgb(255,255,255)',
                width = 2
            ) ),
        colorbar = dict(
            title = "GDP")
        ) ]

layout = dict(
        title = 'Average GDP in different states',
        geo = dict(
            scope='usa',
            projection=dict( type='albers usa' ),
            showlakes = True,
            lakecolor = 'rgb(255, 255, 255)'),
             )

fig = dict( data=data, layout=layout )
py.iplot(fig)
In [32]:
px.line(df, 
        x='year', 
        y='gdp',
        color='state',
        title='State wise gdp from year 1998 to 2020')
  • state wise gdp is quite similar and does not express anything clear.
In [33]:
px.line(df, 
        x='year', 
        y='interest_rate',
        title='Interest rate from year 1998 to 2020')
  • Interest rate is decreasing with time.
In [34]:
px.line(df[['year','price']].groupby('year').mean().reset_index(), 
        x='year', 
        y='price',
        title='Average house price from year 1998 to 2020')
  • House price is increasing with time.

House Price Index(HPI): A house price index measures the price changes of residential housing as a percentage change from some specific start date.

In [35]:
px.line(df.drop_duplicates(subset=['month','year']), 
        x='date',
        y='hpi',
        title='House price index from year 1998 to 2020')
  • HPI is increasing with time.
In [36]:
px.line(df, 
        x='year', 
        y='population_perc',
        color='state',
        title='Population percentage from year 1998 to 2020')
In [37]:
px.line(df, 
        x='year', 
        y='emp_rate',
        color='state',
        title='Employment percentage of total employment from year 1998 to 2020 by state',
        labels={'emp_rate':'Employment percentage','year':'Year'})
  • CA, TX, NY and FL have the highest employment percentage contribution.
In [38]:
px.line(df, 
        x='year', 
        y='PI',
        title='US personal income in dollars from year 1998 to 2020',
        labels={'year':'Year','PI':'Personal income in dollars'})
  • Personal income has been increased over time.
In [39]:
df.describe()
Out[39]:
price year gdp emp_rate interest_rate population_perc month hpi PI
count 217200.000000 217200.000000 217200.000000 217200.000000 217200.000000 217200.000000 217200.00000 217200.000000 217200.000000
mean 114231.871473 2007.500000 2.083475 3.044293 5.486129 3.074083 6.50000 124.954487 11916.607917
std 68477.177107 5.766295 2.528697 2.673223 1.334899 2.748888 3.45206 27.085361 2758.337489
min 0.000000 1998.000000 -8.800000 0.200000 3.654038 0.200000 1.00000 70.408132 7387.700000
25% 77047.568337 2002.750000 0.800000 1.200000 4.124103 1.200000 3.75000 105.143938 9293.275000
50% 102879.114714 2007.500000 2.100000 2.100000 5.833106 2.100000 6.50000 121.240564 12027.950000
75% 133951.030607 2012.250000 3.500000 4.000000 6.444279 3.900000 9.25000 138.308799 14019.925000
max 467778.952082 2017.000000 22.300000 12.000000 8.053462 12.200000 12.00000 346.407731 17361.000000
In [40]:
corr = df.corr()

plt.figure(figsize=(10,10))
sbn.heatmap(corr,annot=True,cmap='coolwarm')
plt.title('Feature correlation')
plt.show()

From above heatmap we can conclude

  • House price is increasing with increase in year, employment rate, population, house price index and Personal income.
  • House price is decreasing as interest rate and gdp increase.
  • Interest rate is decreasing with year.
In [41]:
tmp = df[['state','price']].groupby('state').mean().reset_index()
tmp = tmp.sort_values(by='price',ascending=False)
# plt.figure(figsize=(15,8))
# px.bar(tmp,x='state',y ='price',color='state',title='Average House price by state')

scl = [[0.0, 'rgb(242,240,247)'],[0.2, 'rgb(218,218,235)'],[0.4, 'rgb(188,189,220)'],[0.6, 'rgb(158,154,200)'],[0.8, 'rgb(117,107,177)'],[1.0, 'rgb(84,39,143)']]

data = [ dict(
        type='choropleth',
        colorscale = scl,
        autocolorscale = False,
        locations = tmp['state'], 
        z = tmp['price'].astype(float), 
        locationmode = 'USA-states', 
        marker = dict(
            line = dict (
                color = 'rgb(255,255,255)',
                width = 2
            ) ),
        colorbar = dict(
            title = "GDP")
        ) ]

layout = dict(
        title = 'Average House price by state',
        geo = dict(
            scope='usa',
            projection=dict( type='albers usa' ),
            showlakes = True,
            lakecolor = 'rgb(255, 255, 255)'),
             )

fig = dict( data=data, layout=layout )
py.iplot(fig)
In [42]:
state_data = pd.read_csv('by_state_data/State_time_series.csv')
state_data.drop(columns=['DaysOnZillow_AllHomes',
 'InventorySeasonallyAdjusted_AllHomes',
 'InventoryRaw_AllHomes', 'MedianPriceCutDollar_AllHomes',
 'MedianPriceCutDollar_CondoCoop',
 'MedianPriceCutDollar_SingleFamilyResidence','PctOfListingsWithPriceReductionsSeasAdj_AllHomes',
 'PctOfListingsWithPriceReductionsSeasAdj_CondoCoop',
 'PctOfListingsWithPriceReductionsSeasAdj_SingleFamilyResidence','Sale_Counts_Seas_Adj'],inplace=True)
In [43]:
state_data.Date = pd.to_datetime(state_data.Date)
state_data['year'] = state_data.Date.dt.year

Zillow Home Value Index (ZHVI): A smoothed, seasonally adjusted measure of the typical home value and market changes across a given region and housing type. It reflects the typical value for homes in the 35th to 65th percentile range

In [44]:
var = ['ZHVI_1bedroom',
 'ZHVI_2bedroom',
 'ZHVI_3bedroom',
 'ZHVI_4bedroom',
 'ZHVI_5BedroomOrMore',]
tmp = state_data.groupby('year')[var].mean().reset_index()

fig = go.Figure()
for i in var:
    fig.add_trace(go.Bar(x =tmp['year'], y=tmp[i], name=i.split('ZHVI_')[1]))
fig.update_layout(title='House value index for different year by no of rooms', xaxis_title='year',yaxis_title='ZHIV value')
fig.show()
  • House Value Index depends on no of bedroom
In [45]:
tmp = state_data.groupby('RegionName')['ZHVIPerSqft_AllHomes'].mean().reset_index(name = "ZHVIpersqft_mean")

tmp.RegionName = tmp.RegionName.apply(lambda x: us.states.lookup(x).abbr if us.states.lookup(x) is not None else None )
tmp = tmp.dropna(subset=['ZHVIpersqft_mean','RegionName'], how='any')
In [46]:
scl = [[0.0, 'rgb(242,240,247)'],[0.2, 'rgb(218,218,235)'],[0.4, 'rgb(188,189,220)'],[0.6, 'rgb(158,154,200)'],[0.8, 'rgb(117,107,177)'],[1.0, 'rgb(84,39,143)']]


data = [ dict(
        type='choropleth',
        colorscale = scl,
        autocolorscale = False,
        locations = tmp['RegionName'], 
        z = tmp['ZHVIpersqft_mean'].astype(float), 
        locationmode = 'USA-states', 
        marker = dict(
            line = dict (
                color = 'rgb(255,255,255)',
                width = 2
            ) ),
        colorbar = dict(
            title = "Home value per square foot")
        ) ]

layout = dict(
        title = 'Median house value per square foot in different states',
        geo = dict(
            scope='usa',
            projection=dict( type='albers usa' ),
            showlakes = True,
            lakecolor = 'rgb(255, 255, 255)'),
             )

fig = dict( data=data, layout=layout )
py.iplot(fig)
In [47]:
px.bar(state_data.groupby('year')['ZHVIPerSqft_AllHomes'].mean().reset_index(),
       x='year',
       y='ZHVIPerSqft_AllHomes',
       title='Median house value per square foot in different year',
       labels={'ZHVIPerSqft_AllHomes':'House value index per sqft'})
In [48]:
fig = go.Figure()

var = ['MedianListingPricePerSqft_1Bedroom',
 'MedianListingPricePerSqft_2Bedroom',
 'MedianListingPricePerSqft_3Bedroom',
 'MedianListingPricePerSqft_4Bedroom',
 'MedianListingPricePerSqft_5BedroomOrMore',
 'MedianListingPricePerSqft_DuplexTriplex',
 'MedianListingPricePerSqft_SingleFamilyResidence']
tmp = state_data.groupby('year')[var].mean().dropna().reset_index()
for i in var:
    fig.add_trace(go.Scatter(x=tmp['year'], y=tmp[i],
                        mode='lines',
                        name=i.split('MedianListingPricePerSqft_')[1]))
fig.update_layout(title ='Median house price per sqft by number of bedrooms', xaxis_title='year',yaxis_title='Price per sqft')
fig.show()
  • House price is dependent on no of bedrooms.
In [49]:
fig = go.Figure()

var = ['PctOfHomesIncreasingInValues_AllHomes','PctOfHomesDecreasingInValues_AllHomes']
tmp = state_data.groupby('year')[var].median().dropna().reset_index()
for i in var:
    fig.add_trace(go.Scatter(x=tmp['year'], y=tmp[i],
                        mode='lines',
                        name=i))
fig.update_layout(title ='Percentage of house price increasing and decreasing in values', xaxis_title='year',yaxis_title='Percentage of house price')
fig.show()

Both the line alters between year 2008 and 2011

In [50]:
fig = go.Figure()

var = ['MedianRentalPrice_1Bedroom',
 'MedianRentalPrice_2Bedroom',
 'MedianRentalPrice_3Bedroom',
 'MedianRentalPrice_4Bedroom',
 'MedianRentalPrice_5BedroomOrMore',
 'MedianRentalPrice_CondoCoop',
 'MedianRentalPrice_DuplexTriplex',
 'MedianRentalPrice_MultiFamilyResidence5PlusUnits',
 'MedianRentalPrice_SingleFamilyResidence']
tmp = state_data.groupby('year')[var].mean().dropna().reset_index()
for i in var:
    fig.add_trace(go.Scatter(x=tmp['year'], y=tmp[i],
                        mode='lines',
                        name=i.split('MedianRentalPrice_')[1]))
fig.update_layout(title ='Median rental price per sqft', xaxis_title='year',yaxis_title='Price per sqft')
fig.show()
  • Rental price per sqft increases as no of bedroom increases

Conclusion:

  • States like DC, CA, MA etc have the highest house price throught out the time, So here the state is one of the variable to imapact the house price
  • House prices are increasing and morgage interest rates are decreasing with time, So another variable is morgage interest rate.
  • A house price index measures the price changes of residential housing as a percentage change from some specific start date, here House price index is increasing with time.
  • States like CA, TX, NT and FL have the highest employment rate, which indicate the higher migration rate, hence high demand of houses which can boost the house prices in this states.
  • Personal income in united states has been increased to double(from 8k to 16k) which also increases the buyer capability to buy a house.
  • House prices have positive correlation with time, employment rate, population, HPI and personal income, which means it is increasing with this variables
  • House price have negative correlation with interest rate and GDP, which means it decreases with this variables.
  • Morgage interest rate has been decreased with time, which contributed in the hike of the house prices.
  • House price is dependent on no of bedrooms and size of the house.

List of variables inpacting the house prices will be

  1. Population
  2. Interest rate
  3. Employment
  4. Income
  5. GDP
  6. HPI

Some other variable which impacts the house price will be

  1. Size of the house
  2. Locality
  3. Age of the house
  4. No of rooms
  5. Construction quality
  6. Funishing etc.

References